Maya运行Python文件 maya插件py放在哪个文件夹

您所在的位置:网站首页 python scripts文件夹在哪 Maya运行Python文件 maya插件py放在哪个文件夹

Maya运行Python文件 maya插件py放在哪个文件夹

2024-02-04 09:51| 来源: 网络整理| 查看: 265

Python 查询 maya 文件的引用节点及引用文件的路径环境Maya 2017 & 2018Python 3.6VS Code实现

需求:给定一个 maya 文件,查询这个 maya 文件引用了哪些文件,返回引用的文件路径。

首先,需要使用 maya 软件自带的 mayapy.exe 解释器来执行 maya 包的 Python 命令,如:cmds 的相关命令,maya 中的 Python 为 Python 2,但是开发环境使用的是 Python 3.6,所以需要变通一下。通过 subprocess 模块的 Popen 方法,调用 mayapy.exe 执行一个用 Python 2.7 写的脚本。主文件 main.py 如下:

import os import subprocess def main(): mayaPath = "D:\\Maya2018\\maya2018\\bin\\mayapy.exe" # 修改成你的 mayapy.exe 路径 scriptPath = "C:\\test\\Coding\\test3.py" # 要执行查询引用的文件 file = "C:\\test\\maya\\文档\\w2.ma" # 要查询的文件 try: referenceFilePath = subprocess.Popen(mayaPath+' '+scriptPath+' '+upload_file_path,stdout=subprocess.PIPE,stderr=subprocess.PIPE) out, err = referenceFilePath.communicate() except Exception as e: pass else: try: ref_filepaths = eval(out.decode('utf-8')) # 正确的结果为字符串 list,此命令可以转为 list。 except Exception as e: print(err.decode('utf-8')) print('文件版本高于 maya 软件版本') else: print('引用文件列表 -------:', ref_filepaths) # return ref_filepaths if __name__ == '__main__': main()

以上代码中,得到的结果 out、err 可能存在编码问题,需要处理。如果要在执行的脚本中再传入参数,如上面代码中的 file 参数,在脚本中需要再获取参数。

mayapy.exe 解释器使用的是 Python 2.7 的版本。查阅 maya 技术文档,get_ref.py 具体实现入下:

# -*- coding:utf-8 -*- import os import sys import maya.cmds as cmds reload(sys) sys.setdefaultencoding('utf-8') os.environ["MAYA_SKIP_USERSETUP_PY"] = "" os.environ["setupScriptPaths"] = "D:\\我的文档\\maya\\scripts\\userSetup.py" # 注意修改路径 try: import maya.standalone maya.standalone.initialize(name='python') except Exception as e: pass def get_ref_file_path(upload_file_path): rfnNodes = {} try: cmds.file(upload_file_path, reference=True, namespace='ns') rfnNode = cmds.referenceQuery(upload_file_path, referenceNode=True, child=True) # list except Exception, e: raise e else: rfnNodes[upload_file_path] = rfnNode ref_file_paths = [] if rfnNodes[upload_file_path]: for node in rfnNodes[upload_file_path]: try: cmds.file(upload_file_path, reference=True, namespace='ns') ref_filepath = cmds.referenceQuery(node, filename=True) except Exception, e: raise e else: ref_file_paths.append(ref_filepath) print ref_file_paths # 结果返回到 main.py 中 upload_file_path = sys.argv[1] # 获取传入的 file 参数,即:file = "C:\\test\\maya\\文档\\w2.ma",此参数在拿到之前无法直接使用 file 参数。 get_ref_file_path(upload_file_path) maya.standalone.uninitialize()

以上查询存在一个问题,如果 文件是由高版本 maya 软件(如 2018)创建,此时用低版本 maya(如 2017)打开,maya app 会报意外关闭错误。

因此,需要先获取文件和软件版本信息,比较后再处理查询。修改 get_ref.py 文件如下:

import os ... def get_ref_file_path(upload_file_path): # ... def get_version(upload_file_path): cmds.file(upload_file_path, open=True) file_version = cmds.fileInfo('version', query=True) # ['2018'] maya_version = cmds.about(version=True) cmds.file(upload_file_path, open=True) if file_version


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3